package com.qf.spring.aop.aspect;

import org.aspectj.lang.ProceedingJoinPoint;

import javax.crypto.interfaces.PBEKey;

/**
 * @author 钻五大人
 * @date 2022/4/26 16:22
 */
public class UserAdvice {

    // 前置增强
    // TODO 讲解增强方法切入点参数
    public void before(){
        System.out.println("前置增强执行了...");
    }

    // 后置增强
    public Object afterReturning(Object result){
        // result 目标方法的返回值
        System.out.println("后置增强执行了...");
        return result;
    }

    // 前置最终增强
    // TODO 讲解最终增强
    public void after(){
        System.out.println("最终增强执行了...");
    }

    // 环绕增强
    public Object around(ProceedingJoinPoint jp){
        Object result = null;
        try{
            System.out.println("环绕增强执行了...前...");
            // 决定目标方法是否继续执行 result:目标方法的返回值
            result = jp.proceed();
            System.out.println("环绕增强执行了...后...");
        }catch (Throwable e) {
            e.printStackTrace();
        }
        return result;
    }

    // 异常抛出增强
    // TODO 讲解异常抛出增强
    public void throwing(){
        System.out.println("异常抛出增强执行了...");
    }
}
